/*
 * protocol_model.cpp
 *
 *  Created on: 13.06.2013
 *      Author: SpirTanol
 */

#include "ui/models/protocol_model.h"
#include "events/protocol_event.h"

// QT
#include <QColor>
#include <QSize>
//=========================================================================================
ProtocolModel::ProtocolModel(QVector<ProtocolEvent*> *protocol, QObject *parent) : QAbstractItemModel(parent),
	oProtocol(protocol)
{

}

ProtocolModel::~ProtocolModel()
{

}
//=========================================================================================
int ProtocolModel::columnCount(const QModelIndex &parent) const
{
	return 2;
}

int ProtocolModel::rowCount(const QModelIndex &parent) const
{
	if (!parent.isValid())
		return oProtocol->count();
	return 0;
}
//=========================================================================================
QModelIndex ProtocolModel::index(int row, int column, const QModelIndex &parent) const
{
	int count = rowCount(parent);
	if (column < 0 || column >= columnCount(parent) || row < 0 ||
			parent.column() > 0 || row >= count)
		return QModelIndex();
	return createIndex(row, column, oProtocol->at(row));
}

QModelIndex ProtocolModel::parent(const QModelIndex &index) const
{
	return QModelIndex();
}

bool ProtocolModel::hasChildren(const QModelIndex &parent) const
{
	return (rowCount(parent) > 0);
}
//=========================================================================================
Qt::ItemFlags ProtocolModel::flags(const QModelIndex &index) const
{
	return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
//=========================================================================================
ProtocolEvent *ProtocolModel::eventOf(const QModelIndex &index) const
{
	if (index.isValid())
		return static_cast<ProtocolEvent*>(index.internalPointer());
	return 0;
}
//=========================================================================================
QVariant ProtocolModel::data(const QModelIndex &index, int role) const
{
	if (!index.isValid())
		return QVariant();

	ProtocolEvent *e = eventOf(index);
	if (e == 0) return QVariant();

	if (role == Qt::BackgroundColorRole)
	{
		switch (e->type())
		{
		case PET_CRASH: return QColor(0xFF, 0x33, 0x00);
		case PET_DEVICE: return QColor(0xFF, 0xCC, 0x00);
		default:
			return QVariant();
		}
	}

	if (role == Qt::DisplayRole)
	{
		QString type;
		QString format;

		switch (index.column())
		{
		case 0: return e->strTime();
		case 1: return e->toString();
		}
	}
	return QVariant();
}

QVariant ProtocolModel::headerData(int section, Qt::Orientation orientation, int role) const
{
	if (orientation == Qt::Vertical || role != Qt::DisplayRole)
		return QVariant();
	switch (section)
	{
	case 0:	return QString::fromUtf8("Время");
	case 1:	return QString::fromUtf8("Событие");
	}
	return QVariant();
}
//=========================================================================================
void ProtocolModel::updateProtocol()
{
	beginResetModel();
	endResetModel();
	/*int count = rowCount();

	beginRemoveRows(QModelIndex(), 0, count);
	endRemoveRows();

	for (int i = 0; i < count; ++i)
	{
		beginInsertRows(QModelIndex(), i, i);
		endInsertRows();
	}*/
}
